/**
  ******************************************************************************
  * @file    Driver_User_Interface for Peripheral control.h
  * @author  Dynapack ADT, Hsinmo
  * @version V1.0.0
  * @date    2-November-2012
  * @brief   for user to calling and control Devices
  ******************************************************************************
  * @attention
  *
  * DESCRIPTION....
  *
  * <h2><center>&copy; COPYRIGHT 2012 Dynapack</center></h2>
  */

//==============================================================================
// Includes
//==============================================================================
//#include "MCU_Devices/MCU_Devices.h"

//==============================================================================
// Global/Extern variables
//==============================================================================
//==============================================================================
// Extern functions
//==============================================================================

//==============================================================================
// Private typedef
//==============================================================================
//==============================================================================
// Private define
//==============================================================================


//==============================================================================
// Private macro
//==============================================================================
//==============================================================================
// Private Enum
//==============================================================================

//==============================================================================
// Private variables
//==============================================================================

//==============================================================================
// Private function prototypes
//==============================================================================

//==============================================================================
// Private functions
//==============================================================================
//==============================================================================
// Public functions
//==============================================================================
/////////////////////////////////////////////////////////////////////
// Polling Timer config
/////////////////////////////////////////////////////////////////////
#define Max_Polling_Function_Num    Max_TimerA_INTERRUPT_Function_Calling

void _DUI_Init_Polling_Timer();
void _DUI_Start_Polling_Timer();
void _DUI_Stop_Polling_Timer();
void _DUI_Set_Function_To_Polling(void (*polling_fun)());
void _DUI_Remove_Function_Out_Of_Polling(void (*polling_fun)());

/////////////////////////////////////////////////////////////////////
// Communication packet Form detection Timer config
/////////////////////////////////////////////////////////////////////
#define Max_Calling_Function_Num_While_Detection    Max_TimerB_INTERRUPT_Function_Calling

void _DUI_Init_Comm_Packet_Form_Detection_Timer();
void _DUI_Set_Calling_Function_While_Form_Detection(t_uint8 fun_index, void (*calling_fun)(), t_uint16 ms_Dealy );
void _DUI_Remove_Detection_Calling_Function(t_uint8 fun_index);
/////////////////////////////////////////////////////////////////////
// I/O Ports config
/////////////////////////////////////////////////////////////////////
void _DUI_Init_IO_Ports();
/////////////////////////////////////////////////////////////////////
// Mux switch Rs485, Uart config
/////////////////////////////////////////////////////////////////////
enum Peripheral_ch{
    RS485_Channel,  //for channel 1
    UART_Channel,   //for channel 2
    None1_Ch,       //for channel 3
    None2_Ch        //for channel 4
};
void _DUI_MUX_Init();
void _DUI_Switch_To_Communication_Port(t_uint8 peripheral_Channel);
/////////////////////////////////////////////////////////////////////
// Charger Function Control
/////////////////////////////////////////////////////////////////////
enum ADC_channnel_def{
    ADC_24V_Channel,
    ADC_36V_Channel,
    ADC_48V_Channel,
    ADC_BatteryV_Channel
};

void _DUI_Charger_Function_Init();
void _DUI_Set_Charger_ID(t_uint8 channel);
void _DUI_Set_Charger_Channel(t_uint8 channel);
void _DUI_Start_ADC_Conversion();
void _DUI_Set_Function_For_ADC_Conversion_Done_Calling(void (*calling_fun)());
void _DUI_Remove_ADC_Conversion_Done_Function();
t_uint16 _DUI_Channle_ADC_Result(t_uint8 ADCchannel);
t_uint16 _DUI_Get_Voltage_By_ADC(t_uint8 ADCchannel, t_uint16 Vadc);
void _DUI_Auto_check_Charger_for_Pollong();
